#ifndef TRADING_SYSTEM_HPP
#define TRADING_SYSTEM_HPP

#include "market_data_manager.hpp"
#include "user.hpp"
#include "user_account.hpp"
#include <QMap>
#include <QObject>
#include <QString>

class TradingSystem : public QObject {
  Q_OBJECT

public:
  explicit TradingSystem(QObject *parent = nullptr);
  ~TradingSystem();

  // 初始化系统
  bool initialize();

  // 用户管理
  bool registerUser(const QString &username, const QString &password,
                    double initialBalance = 100000.0);
  bool loginUser(const QString &username, const QString &password);
  void logoutUser();
  bool isLoggedIn() const;

  // 获取用户账户
  UserAccount *getCurrentAccount();

  // 市场数据
  MarketDataManager *getMarketDataManager();

  // 更新用户账户中的股票价格
  void updateAccountStockPrices();

  // 保存数据
  bool saveUserData(const QString &filePath = "data/users.json");

signals:
  void userLoggedIn(const QString &username);
  void userLoggedOut();
  void userRegistered(const QString &username);
  void accountUpdated();

private:
  // 从文件加载用户数据
  bool loadUserData(const QString &filePath = "data/users.json");

private:
  MarketDataManager *m_marketDataManager;
  QMap<QString, User> m_users;
  QMap<QString, UserAccount> m_accounts;
  QString m_currentUsername;
  bool m_isLoggedIn;
};

#endif // TRADING_SYSTEM_HPP
